'''
1. 获取当前文件路径                   getcwd()
2. 新建目录                         mkdir()
3. 改变当前所在的工作目录              chdir()
4. 列出当前目录下所有的目录和文件        listdir()
5. 分离文件名与路径                   os.path.split()
6. 改变文件名                        os.renames()
7. 判断当前内容是否是目录              os.path.isdir()
8. 判断当前内容是否是文件              os.path.isfile()

9. 移动文件位置                      shutil.move()
10. 复制文件                         shutil.copy2()
11. 读取文件                        file.read()
12. 按行读取文件                     file.readline()
13. 返回所有行                       file.readlines()
14. 打开文件                        open()
15. 关闭文件                        close()
16. 写入文件                        file.write()
'''

# 零、encoding/ decoding

# 一、打开文件
# open(file, mode='r', encoding='utf-8')
# file 用于文件/文件夹路径的字符串，可以是绝对路径，也可以是相对路径
# mode 文件打开模式，默认值是r，只读模式
# encoding 文本模式下规定文件的编码格式

# mode的几种常用参数：
# 1. 'r'：文本读取(默认)
# 2. 'w'：文件写入，并清空文件（慎用），文件不存在则创建
# 3. 'x'：文件写入，排它性创建，如果文件已存在则失败
# 4. 'a'：文件写入，如果文件存在则在末尾追加，不存在则创建
# 与mode组合的字符
# 1. 'b'：二进制模式。
# 2. 't'：文本模式（默认）。
# 3. '+'：读取与写入。比如'r+'表示同时可以读写。

# 二、读/写文件 read/write
# 读写文件分为三步：
# 1. 打开文件。
# 2. 读写文件。file.read()/write('写入的内容')
# 3. 关闭文件。
# ================================================
# 多种读取方式：
# read()：读取文件数据。默认从头开始，返回值为字符串
# readline(n)：读取一行数据
# readlines()：按行读取所有数据，结果为列表，一行一个成员
# ================================================
# 写文件：
# with open() as 函数名:
#   函数名.write('字符串')

# 三、with上下文管理：用于处理忘记关闭文件句柄的问题，为了避免资源浪费，使用with来管理上下文
# with open() as 函数名:
#   data = 函数名.read()
#   print(data)

# 四、tell方法：文件对象的tell方法返回整数，表示文件指针距离文件开头的字节数
# with open() as 函数名:
#   print(函数名.tell)
#   content = 函数名.read(3)
#   print(content)
#   print(函数名.tell)

# 五、seek方法：移动文件句柄
# seek(offset, whence)
# offset：表示偏移指针的字节数
# whence：偏移参考。默认为0。  0：表示偏移参考文件的开头，offset必须是>=0的整数
#                          1：表示偏移参考当前位置，offset可以为负数
#                          2：表示偏移参考文件的结尾，offset一般是负数
# 注意：文本模式下只允许从文件的开头进行偏移，只支持whence为0的情况

import os
import shutil

# 字符串的encode和decode
# name = "哈哈哈"
# data = name.encode('utf-8')
# print(type(data))
#
# original = data.decode('utf-8')
# print(original)
#

# 打开文件
# file = open('info1.txt', mode='r', encoding='utf-8')
# data = file.read()
# file.close()
# print(data)


# with
# data = 0
# with open('a1.png', mode='rb') as read_file:
#     data = read_file.read()
#
# with open('a2.png', mode='wb') as write_file:
#     write_file.write(data)


# tell
# with open('info1.txt', mode='r', encoding='utf-8') as f:
#     print(f.tell())
#     content = f.read(3)
#     print(content)
#     print(f.tell())


# seek
with open('info1.txt', 'r', encoding='utf-8') as f:
    f.seek(0)
    print(f.read(3))
    f.seek(1)
    print(f.read(2))
    f.seek(2)
    print(f.read())
